function maxInWindows(num, size)
{
    // write code here
    var queue = [] // 滑动窗口的最大值 降序排列 里面是数组元素的下标
    var res = [] // 结果数组 每一个滑动窗口的最大值
    for(let i = 0;i < size;i++){ // 首先第一个滑动窗口 遍历0~size
      while(queue.length && num[queue[queue.length-1]] <= num[i]){ // 当前的队列有元素 并且队尾元素对应的元素值 小于当前的值 说明当前值才是队首元素 那么就把队尾元素给弹出 并插入当前值
        queue.pop()
      }
      queue.push(i)
    }
    // 到这里就拿到了前三个元素 他的单调队列的结果
    res.push(num[queue[0]]) // 在结果数组中插入队首元素的值
    for(let i = size;i < num.length ;i++){ // 滑动过程 从size开始滑动一直到最后一个
      if(queue[0] <= i-size){ // 如果当前的队首元素(代表下标) <= i-size(代表当前元素的下标-滑动窗口的大小) 等于也不行
        queue.shift() // 就把队首元素弹出
      }
      while(queue.length && num[queue[queue.length-1]] <= num[i]){ // 并且判断当前的队尾值 是不是小于当前值 如果小于当前值 就把队尾值弹出 
        queue.pop()
      }
      queue.push(i) // 最后把当前的元素给插入
      res.push(num[queue[0]]) // 把当前的队首元素对应的元素给插入到结果数组中
    }
    return res
}
module.exports = {
    maxInWindows : maxInWindows
};